// models/content.model.ts

/**
 * 单元格内容类型的基类
 */
export abstract class ContentDefinition {
  /**
   * 内容类型唯一标识符
   * e.g., 'text', 'input', 'image', 'employee-selector'
   */
  abstract readonly type: string;

  constructor() {}
}

// 3.1 文本内容
export class TextContent extends ContentDefinition {
  readonly type = 'text';
  valueType: 'static' | 'metaModel' | 'predefined' = 'static';
  staticText?: string; // 用户输入的静态文本
  // metaModelField 在 CellDefinition 上定义，这里不需要
  predefinedType?: 'currentDate'; // 预定义类型，如当前日期
  dateFormat?: string = 'YYYY-MM-DD HH:mm:ss'; // 日期格式
  metaModelPlaceholderColor: string = '#999999'; // 数据元模型占位符颜色

  constructor(initial?: Partial<TextContent>) {
    super();
    Object.assign(this, initial);
  }
}

// 3.2 输入框内容
export class InputContent extends ContentDefinition {
  readonly type = 'input';
  inputType: 'text' | 'number' | 'date' | 'password' | 'textarea' = 'text';
  /**
   * 对应表单数据的属性名 (prop)
   * 非常重要，用于数据绑定
   */
  prop: string = '';
  placeholder?: string;
  defaultValue?: any;
  disabled: boolean = false;
  readonly: boolean = false;
  maxLength?: number;
  minLength?: number;
  required: boolean = false;
  // dataMetaModelField 也在 CellDefinition 上，用于指示该输入框绑定哪个元模型字段

  constructor(initial?: Partial<InputContent>) {
    super();
    Object.assign(this, initial);
    if (!this.prop && initial?.prop) {
      // 确保 prop 被正确设置
      this.prop = initial.prop;
    }
  }
}

// 3.3 图片内容 (示例)
export class ImageContent extends ContentDefinition {
  readonly type = 'image';
  srcType: 'staticUrl' | 'metaModel' = 'staticUrl';
  staticUrl?: string;
  // metaModelField 在 CellDefinition 上

  constructor(initial?: Partial<ImageContent>) {
    super();
    Object.assign(this, initial);
  }
}

// 未来可扩展的其他内容类型，例如：
// export class EmployeeSelectorContent extends ContentDefinition {
//   readonly type = 'employee-selector';
//   prop: string = ''; // 绑定的字段
//   // ...其他特定属性
// }

// export class FormulaContent extends ContentDefinition {
//   readonly type = 'formula';
//   expression: string = ''; // 计算公式
//   // ...
// }
